It is currently very difficult to add new (or improve legacy) kernel-level internetworking functions, such as IP mobility support, on computers using software-based solutions. This typically requires modifications to the IP stack that is built into an operating system, something that cannot be easily accomplished by independent software developers.
In the networking environment, data packets are dispatched across network connections by employing software drivers that control hardware modules. An operating system, such as, for example Microsoft Windows®, requires that drivers be programmed as passive, instantly responsive routines for the purpose of device I/O. A driver does not have active control; it always waits to be called by the operating system. Accordingly, in response to a call, the driver will rapidly complete the specified I/O operation and return control back to the operating system as quickly as possible. If the underlying physical device cannot finish the I/O operation within a specified period of time, the driver will typically start the physical device, instruct the physical device to generate a hardware interrupt to notify the operating system after the I/O operation has finished, and immediately return control back to the operating system with a pending status.
This invention proposes using a network interface driver to support new (or improve legacy) internetworking protocols, a task that was previously addressed at the IP layer or above. However, many internetworking protocols that are based on a client-server model require the client (and often the server) to have active, persistent control in order to manage signaling over a network connection. The signaling must account for transmission time over the network and unexpected breaks that can occur in the network connection. Hence, if a network interface driver is used to support internetworking protocols, the requirement for active, persistent control conflicts with the fundamental characteristics of a driver such as passiveness and instant response.